package com.yq.homework.day281;


/**
 * @author 3307235355@qq.com
 * @since 2022/06/28 19:47
 * 用多线程代码来模拟，
 * 迅雷用3个线程下载100M资源的的过程。
 * 每个线程每次，一次下载1兆(M)资源，
 * 直到下载完毕，即剩余的待下载资源大小为0
 * (用一个整数表示资源大小，每次个线程每次下载多少兆(M),
 * 剩余待下载资源就减少多少兆(M)，
 * 模拟我们售票的代码实现，考虑多线程的数据安全问题)
 */
public class Demo04 {
    public static void main(String[] args) {
        XunLei m1 = new XunLei();
        new Thread(m1, "线程一").start();
        new Thread(m1, "线程二").start();
        new Thread(m1, "线程三").start();
    }
}
class XunLei implements Runnable {
    static  boolean flag =true;
    static int size = 100;
    // Object o = new Object();
    @Override
    public void run() {
        while (flag) {
            synchronized (this) {
                download();
            }
        }
    }

    public synchronized void download() {
        if (size >= 0) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            size--;
            if (size < 0) {
                System.out.println("下载了完成！");
            } else {
                System.out.println(Thread.currentThread().getName() + "下载了1M,还是剩" + size+"M");
            }
        }else {
            flag=false;
        }
    }
}
